function showInfo() {
    console.log("普通函数函数运行");
    age = 100
}



//匿名函数 在定义的时候 需要直接调用，或者使用一个变量接收
let myfun = function () {
    console.log("匿名函数执行\r\n\r\n");
};


// let nums = (1 + 2) * 3 / 4

//匿名函数 直接在声明的时候调用 ,  闭包
(function () {
    console.log(" 1 匿名函数执行");
})()


showInfo();
console.log("age", age);

myfun();


// let funcAs1 = function (a, b) {
//     console.log("a + b ", (a + b))
// }

// funcAs1(10, 20)


let funcAs1 = (a, b) => {
    console.log("a + b ", (a + b))
}




funcAs1(20, 20);



// let funcAs2 = (a) => {
//     console.log("a ", a);
// }


//一个参数 ， 参数列表中的括号可以去掉
let funcAs2 = a => {
    console.log("a ", a);
}
funcAs2(100)



// let funcAs3 = (a, b) => {
//     console.log("a + b ", (a + b))
//     return a + b
// }

// let funcAs3 = (a, b) => {
//     console.log(a + b)
// }


//如果 箭头函数中只有一句话， 大括号可以省略

// let funcAs3 = (a, b) => console.log(a + b)

//如果 箭头函数中只有一句话 带返回值
// let funcAs3 = (a, b) => {
//     return a + b
// }
//如果 箭头函数中只有一句话 带返回值  a + b  就是 函数的返回值
let funcAs3 = (a, b) => a + b


// let funcAs3 = (a, b) => a + b

console.log("执行箭头函数 3 ：" + funcAs3(10, 50));




//如果函数没有声明返回结果则 返回值是undefined 
function abc() {

}
console.log("abc(): ", abc());


console.log("\r\n\r\n==============================箭头函数的this===================================");


// let person = {

//     name: 'jshand',
//     age: 18,

//     sayHi: function () {
//         console.log("this", this);

//         console.log(` 我是 ${this.name} ，今年 ${this.age} `)
//     }

// }

// person.sayHi()

// 箭头函数 没有自己的 this
let func = () => {
    console.log("this", this);
    console.log(` 我是 ${this.name} ，今年 ${this.age} `)
}
let person = {

    name: 'jshand',
    age: 18,

    sayHi: func

}

person.sayHi()


//当在事件中注册  函数， this代表的是函数发生的的源 
document.querySelector("#btn").onclick = function () {
    console.log("this", this)
}
